package com.qf.interceptor;/*
 *保护你的大熊
 *2021/11/17
 *19:53
 */

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 拦截器中方法的执行顺序：
 * ======MyInterceptor1==============preHandle========
 * ======MyInterceptor1==============preHandle========
 * ======MyInterceptor1==============preHandle========
 */
public class MyInterceptor1 implements HandlerInterceptor {
    /**
     * 执行时机：controller方法没有执行，先执行这个方法
     * 使用场景：
     *      权限模块给功能使用，判断当前请求是否有权限访问本系统
     *      如果这个方法返回true，请求放行，正常执行controller方法
     *      如果返回false，请求被拦截，无法执行controller方法
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("======MyInterceptor1==============preHandle========");
        //返回false，请求被拦截，不执行controller方法
        //返回true，请求放行，执行controller方法
        return true;
    }

    /**
     * 执行时机：controller方法执行完成，但是数据还没有返回到页面，此时会执行这个方法
     * 使用场景：
     *      在controller方法执行完成后，但是数据没有返回到页面的时候，可以在这里对整个系统返回到页面的数据
     *      进行统一的加工处理，如果有全局整个系统都会使用到的数据，可以在这里统一加入到model模型中，带到页面中使用
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("======MyInterceptor1==============preHandle========");
    }

    /**
     * 执行时机：controller方法执行完成后，数据也返回到页面，这个时候执行此方法
     * 使用场景：
     *      记录所有的日志数据，业务日志数据
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("======MyInterceptor1==============preHandle========");

    }
}
